-- rescue_apprentice
-- Created by chengb Feb/7/2015
-- 营救冈布奥学徒

-- 内部函数声明
local whenPickUp;

-- 关注地牢中拾取的事件
EventMgr.register("task/rescue_apprentice", event.PICK_UP_ITEM, function(args)
    whenPickUp(args);
end);

-- 地牢中拾取的回调
whenPickUp = function(args)
    local bonus = args.bonus;

    -- 玩家不在地牢中
    if not DungeonM.isInDungeon() then
        return;
    end

    -- 不是获得冈布奥学徒
    if bonus[1] ~= 2 or bonus[2] ~= "idle_worker_num" then
        return;
    end

    -- 获取当前所在的地牢层
    local layer = DungeonM.currentLayer();

    -- 获取当前所在的地牢区域
    local area = DungeonM.getDungeonId();

    -- 获取本规则对应的所有任务
    local taskList = TaskM.getTasksByRule("rescue_apprentice");
    if type(taskList) ~= "table" or #taskList <=0 then
        return;
    end

    -- 判断是否是符合要求的任务
    local function isValidTask(info)
        local taskId = info["id"];

        if info["area"] ~= area then
            -- 非当前区域的任务
            return false;
        end

        if TaskM.isFinished(taskId) then
            -- 已完成
            return false;
        end

        local progress = TaskM.getProgress(taskId);
        if progress < 0 then
            -- 未领取
            return false;
        end

        return true;
    end

    for _, info in pairs(taskList) do
        local taskId = info["id"];
        local progress = TaskM.getProgress(taskId);

        if isValidTask(info) then
            -- 如果是符合条件的任务，更新进度
            TaskM.setProgress(taskId, progress + 1);
        end
    end
end

return {
    -- 获取任务描述
    getTaskDesc = function(taskId)
        local descFormat = TaskM.query(taskId, "desc");

        -- 获取当前区域的学徒信息
        local area  = TaskM.query(taskId, "area");
        local apprentice = DungeonAreaM.query(area, "apprentice");
        if apprentice == nil or #apprentice < 1 then
            return descFormat;
        end

        local str = "";
        for i = 1, #apprentice do
            str = str .. apprentice[i] .. "F";
            if i < #apprentice then
                str = str .. "/";
            end
        end

        local desc = string.format(descFormat, str);
        return desc;
    end,

    -- 获取任务日志
    getTaskLog = function(taskId)
        return AreaTaskM.getTaskLog(taskId);
    end
};